/**
********************************************************************************
@file     test_ut_verify_ptr_ne.c
@brief    对文件的简要说明
@details  对文件的详细说明
@author   jcai
@date     2024-09-16 17:12:51
@copyright Copyright &copy; 2024 wy1107412334@163.com All rights reserved
@version  v0.0.1

\n Email:  wy1107412334@163.com
\n Blog:   None
\n Github: https://github.com/wy1107412334
\n Gitee:  https://gitee.com/git.git1107412334.com

********************************************************************************
@note
None.
********************************************************************************
@attention
None.
********************************************************************************
@verbatim
@endverbatim
********************************************************************************
@par 修订记录
- jcai, 2024-09-16 17:12:51
  - 首次编写

********************************************************************************
*/

/* 头文件导入区 ------------------------------------------------------------- */

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "unit_test.h"


/** @defgroup TEST_UT_VERIFY_PTR_NE TEST_UT_VERIFY_PTR_NE
@brief test_ut_verify_ptr_ne modules
@{
*/



/* 宏定义区 ----------------------------------------------------------------- */

#define __FUT__     ut_verify_ptr_ne


#define FUT_SETUP_EN
#define FUT_CLEANUP_EN




/* 数据类型声明区 ----------------------------------------------------------- */


#ifdef FUT_SETUP_EN
static STATUS futSetup(void);
#define FUT_SETUP_FUNC  futSetup
#else
#define FUT_SETUP_FUNC  NULL
#endif

#ifdef FUT_CLEANUP_EN
static void futCleanup(void);
#define FUT_CLEANUP_FUNC    futCleanup
#else
#define FUT_CLEANUP_FUNC    NULL
#endif

UT_FUT_ENTRY(1);
UT_FUT_ENTRY(2);
UT_FUT_ENTRY(3);
UT_FUT_ENTRY(4);






/* 变量定义区 --------------------------------------------------------------- */


static ut_case_t futCaseTbl[] =
{
    // 注册要测试的用例
    // tcId: 测试用例的id
    // fut_entry: 测试用例的入口函数
    // checkCount: 测试用例中有多少个检查项
    // UT_TEST_CASE_REG(tcId, fut_entry, checkCount),
    UT_TEST_CASE_REG(TC_1, UT_FUT_NAME(1), 1),
    UT_TEST_CASE_REG(TC_2, UT_FUT_NAME(2), 1),
    UT_TEST_CASE_REG(TC_3, UT_FUT_NAME(3), 1),
    UT_TEST_CASE_REG(TC_4, UT_FUT_NAME(4), 1),
};


// futname: 要测试的函数的名字
//UT_DEFINE_FUT_VARNAME(futname) =
UT_DEFINE_FUT_VARNAME(ut_verify_ptr_ne) =
{
    UT_FUNC_STR(__FUT__),
    FUT_SETUP_FUNC,
    FUT_CLEANUP_FUNC,
    {0},
    {0},
    futCaseTbl,
    sizeof(futCaseTbl) / sizeof(futCaseTbl[0]),
    0
};






static ut_case_t * pbakbuf;



/* 函数定义区 --------------------------------------------------------------- */


#ifdef FUT_SETUP_EN
static STATUS futSetup(void)
{
    pbakbuf = malloc(sizeof(futCaseTbl));
    if (pbakbuf == NULL)    return ERROR;
    return OK;
}
#endif

#ifdef FUT_CLEANUP_EN
static void futCleanup(void)
{
    free(pbakbuf);
}
#endif

static void backup(void)
{
    memcpy(pbakbuf, futCaseTbl, sizeof(futCaseTbl));
}

static void restore(void)
{
    memcpy(futCaseTbl, pbakbuf, sizeof(futCaseTbl));
}









/**
********************************************************************************
@brief    校验返回值为 false
@details
验证两个值都为NULL

在FUT的参数:
- [act]: NULL
- [exp]: NULL
FUT返回 false
@param    none
@retval  none
@note    none
*/
UT_FUT_ENTRY(1)
{
    bool exp = false;

    backup();
    bool act = ut_verify_ptr_ne(NULL, NULL, "NULL == NULL");
    restore();

    ut_verify_bool_eq(act, exp, "校验FUT返回true");
}

/**
********************************************************************************
@brief    校验返回值为 false
@details
验证两个值相等，但不是NULL

在FUT的参数:
- [act]: 一个变量的指针
- [exp]: 与act一样的指针
FUT返回 false
@param    none
@retval  none
@note    none
*/
UT_FUT_ENTRY(2)
{
    bool exp = false;

    void * actPtr = &exp;
    void * expPtr = &exp;

    backup();
    bool act = ut_verify_ptr_ne(actPtr, expPtr, "act == exp");
    restore();

    ut_verify_bool_eq(act, exp, "校验FUT返回false");
}

/**
********************************************************************************
@brief    校验返回值为 true
@details
验证两个参数不相等

在FUT的参数:
- [act]: 变量 exp 的指针
- [exp]: 指向一个包含本函数名的字符串
FUT返回 true
@param    none
@retval  none
@note    none
*/
UT_FUT_ENTRY(3)
{
    bool exp = true;

    void * actPtr = &exp;
    void * expPtr = (void *) __func__;

    backup();
    bool act = ut_verify_ptr_ne(actPtr, expPtr, "act != exp");
    restore();

    ut_verify_bool_eq(act, exp, "校验FUT返回true");
}

/**
********************************************************************************
@brief    校验返回值为 true
@details
验证两个参数不相等

在FUT的参数:
- [act]: NULL
- [exp]: 指向一个包含本函数名的字符串
FUT返回 true
@param    none
@retval  none
@note    none
*/
UT_FUT_ENTRY(4)
{
    bool exp = true;

    void * actPtr = NULL;
    void * expPtr = (void *) __func__;

    backup();
    bool act = ut_verify_ptr_ne(actPtr, expPtr, "act != exp");
    restore();

    ut_verify_bool_eq(act, exp, "校验FUT返回true");
}



/** defgroup TEST_UT_VERIFY_PTR_NE
@}
*/


/*********************************** END OF FILE ******************************/
